Android অ্যাপ্লিকেশনের আর্কিটেকচারটি কয়েকটি স্তর নিয়ে গঠিত, যা একসঙ্গে একটি অ্যাপ্লিকেশন চালাতে সাহায্য করে। এই আর্কিটেকচারটি একটি মডুলার ফর্মে সাজানো হয়েছে, যেখানে প্রত্যেকটি স্তর একে অপরের সাথে সমন্বিত হয়ে কাজ করে।
Android অ্যাপ্লিকেশনের আর্কিটেকচার
নিচে Android অ্যাপ্লিকেশনের আর্কিটেকচারের স্তরগুলো নিয়ে বিস্তারিত আলোচনা করা হলো:
১. Applications Layer
এই স্তরটি Android অ্যাপ্লিকেশনের শীর্ষ স্তর, যেখানে আপনার ইনস্টল করা অ্যাপ্লিকেশনগুলো থাকে। যেমন:
- Contacts, Messages, Phone, Gallery ইত্যাদি।
- ডেভেলপাররা এই স্তরে নতুন অ্যাপ্লিকেশন তৈরি করেন এবং ব্যবহারকারীরা এগুলো ইনস্টল ও ব্যবহার করেন।
২. Application Framework
এই স্তরটি ডেভেলপারদের জন্য খুব গুরুত্বপূর্ণ, কারণ এটি API এবং বিভিন্ন সেবা সরবরাহ করে, যা অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এর মূল উপাদানগুলো হল:
- Activity Manager: এটি অ্যাপ্লিকেশনের লাইফসাইকেল পরিচালনা করে।
- Content Providers: এটি অ্যাপ্লিকেশনগুলির মধ্যে ডেটা শেয়ারিংয়ের সুবিধা দেয়।
- View System: এটি UI তৈরি করতে সাহায্য করে।
- Resource Manager: এটি রিসোর্স যেমন স্ট্রিং, ইমেজ এবং লেআউট পরিচালনা করে।
৩. Libraries
এই স্তরটি নেটিভ C/C++ লাইব্রেরির উপর ভিত্তি করে তৈরি, যা অ্যাপ্লিকেশনের বিভিন্ন ফাংশন বাস্তবায়ন করে। এর গুরুত্বপূর্ণ উপাদানগুলো হল:
- Android Runtime (ART): Android অ্যাপ চালানোর জন্য এটি গুরুত্বপূর্ণ, যা অ্যাপ্লিকেশন কোডকে বাইনারি কোডে রূপান্তরিত করে।
- SQLite: এটি লাইটওয়েট ডাটাবেস ব্যবস্থাপনা সিস্টেম।
- OpenGL/ES: এটি 2D এবং 3D গ্রাফিক্স রেন্ডারিংয়ের জন্য ব্যবহৃত হয়।
- Media Framework: অডিও ও ভিডিও সমর্থনের জন্য লাইব্রেরি।
৪. Linux Kernel
Linux Kernel হল Android এর ভিত্তি, যা হার্ডওয়্যার এবং সফটওয়্যার স্তরের মধ্যে সংযোগ তৈরি করে। এর কাজগুলো হল:
- Process Management: প্রসেস চালানো এবং মেমোরি ম্যানেজমেন্ট।
- Device Drivers: ডিভাইসের বিভিন্ন উপাদান যেমন ক্যামেরা, কীবোর্ড, ডিসপ্লে ইত্যাদির জন্য ড্রাইভার প্রদান।
- Power Management: ব্যাটারি এবং পাওয়ার ব্যবস্থাপনা।
উপসংহার:
Android এর আর্কিটেকচার একটি মডুলার ডিজাইন অনুসরণ করে, যা সিস্টেমের প্রতিটি স্তরকে নির্দিষ্ট কাজ সম্পাদন করতে সাহায্য করে। এই স্তরগুলির মধ্যে সমন্বয় করে একটি অ্যাপ্লিকেশন সুষ্ঠুভাবে চলতে পারে।
Android Runtime (ART) এবং Dalvik Virtual Machine (DVM) হল Android এর দুটি গুরুত্বপূর্ণ কম্পোনেন্ট, যা অ্যাপ্লিকেশন কোড এক্সিকিউট করার জন্য ব্যবহৃত হয়। এই দুটি প্রযুক্তির মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, এবং Android সময়ের সাথে ART-কে DVM-এর জায়গায় প্রতিস্থাপন করেছে। নিচে বিস্তারিতভাবে ART এবং DVM এর তুলনামূলক বিশ্লেষণ দেওয়া হলো:
১. Dalvik Virtual Machine (DVM)
Dalvik Virtual Machine Android এর প্রাথমিক runtime environment ছিল, যা Android 5.0 Lollipop এর আগ পর্যন্ত ব্যবহৃত হত। DVM হল একটি জাভা ভিত্তিক ভার্চুয়াল মেশিন, যা Android অ্যাপ্লিকেশনগুলিকে চালাতে সক্ষম করে। DVM Android অ্যাপ্লিকেশনগুলিকে Dalvik bytecode এ রূপান্তর করে এবং Android ডিভাইসে চালায়।
DVM এর বৈশিষ্ট্য:
JIT (Just-in-Time) Compiler: DVM JIT Compiler ব্যবহার করে অ্যাপ্লিকেশন রান টাইমে কম্পাইল করে। অর্থাৎ, যখন একটি অ্যাপ্লিকেশন চালু হয়, তখনই কেবলমাত্র কোড কম্পাইল করা হয়। এর ফলে অ্যাপ চালু হতে কিছুটা সময় লাগে।
Low memory usage: DVM কম মেমোরি ব্যবহার করার জন্য ডিজাইন করা হয়েছিল, যাতে এটি মোবাইল ডিভাইসের জন্য কার্যকর হয়।
Each app runs in its own DVM instance: প্রতিটি অ্যাপ্লিকেশন নিজের একটি DVM ইনস্ট্যান্সে চলে, যা নিরাপত্তা এবং মেমোরি ম্যানেজমেন্টের জন্য গুরুত্বপূর্ণ।
DVM এর অসুবিধা:
- Performance Limitations: যেহেতু DVM রান টাইমে কম্পাইল করে (JIT), তাই এর পারফরম্যান্স একটু ধীরগতির হতে পারে।
- Battery Efficiency: DVM এর কম্পাইলিং প্রসেস অনেক সময় এবং ব্যাটারি খরচ করে, যা Android ডিভাইসের ব্যাটারি লাইফে নেতিবাচক প্রভাব ফেলে।
২. Android Runtime (ART)
Android Runtime (ART) Android 4.4 KitKat এ প্রথম পরীক্ষামূলকভাবে চালু হয় এবং Android 5.0 Lollipop থেকে DVM-এর স্থলাভিষিক্ত হয়। ART-কে DVM-এর চেয়ে উন্নত এবং দ্রুততর পারফরম্যান্স দেওয়ার জন্য ডিজাইন করা হয়েছে।
ART এর বৈশিষ্ট্য:
AOT (Ahead-of-Time) Compilation: ART, DVM-এর বিপরীতে, AOT Compiler ব্যবহার করে, যা অ্যাপ ইনস্টলেশনের সময় কোড কম্পাইল করে ফেলে। ফলে যখনই অ্যাপ চালানো হয়, এটি সরাসরি কম্পাইলড কোড থেকে চালায়, যা অ্যাপের লোডিং টাইমকে দ্রুত করে।
Improved Garbage Collection: ART আরও উন্নত Garbage Collection (GC) মেকানিজম ব্যবহার করে, যা মেমোরি ম্যানেজমেন্টকে উন্নত করে এবং অ্যাপের স্লোডাউন কমায়।
Better Debugging Support: ART উন্নত ডিবাগিং টুল এবং প্রোফাইলিং সাপোর্ট করে, যা ডেভেলপারদের জন্য অ্যাপের কার্যকারিতা উন্নত করতে সহায়ক।
Battery Efficiency: যেহেতু ART রান টাইমে কোড কম্পাইল করে না, এটি DVM-এর চেয়ে কম ব্যাটারি ব্যবহার করে, ফলে ব্যাটারি লাইফ বাড়ে।
ART এর সুবিধা:
- Faster Execution: অ্যাপ চালানোর সময় ART অনেক দ্রুততর, কারণ এটি আগে থেকেই কম্পাইল করা কোড ব্যবহার করে।
- Better Memory Management: ART এর উন্নত মেমোরি ম্যানেজমেন্ট সিস্টেম, যা অ্যাপ পারফরম্যান্সের উন্নতি করে।
- Reduced CPU Usage: কোড কম্পাইল করার জন্য অতিরিক্ত CPU ক্ষমতা প্রয়োজন হয় না, ফলে ডিভাইসের অন্যান্য কাজগুলোও ভালোভাবে চলে।
ART এর অসুবিধা:
- Larger Storage Space Requirement: যেহেতু ART ইনস্টলেশনের সময় কোড কম্পাইল করে, এটি ডিভাইসে বেশি স্টোরেজ স্পেস ব্যবহার করে। ইনস্টলেশনের সময় অ্যাপের আকার কিছুটা বড় হয়।
৩. DVM এবং ART এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Dalvik Virtual Machine (DVM) | Android Runtime (ART) |
|---|---|---|
| কম্পাইলেশন টাইম | Just-in-Time (JIT) | Ahead-of-Time (AOT) |
| অ্যাপ লোডিং টাইম | অপেক্ষাকৃত ধীর | দ্রুত |
| মেমোরি ম্যানেজমেন্ট | সাধারণ Garbage Collection | উন্নত Garbage Collection |
| পারফরম্যান্স | কম | উচ্চ |
| স্টোরেজ স্পেস | কম স্পেস প্রয়োজন | বেশি স্পেস প্রয়োজন |
| ব্যাটারি খরচ | বেশি | কম |
| ইনস্টলেশন টাইম | দ্রুত | অপেক্ষাকৃত ধীর |
৪. উপসংহার
DVM এবং ART উভয়ই Android অ্যাপ্লিকেশন চালানোর জন্য ব্যবহৃত হয়, তবে ART হল DVM-এর একটি উন্নত সংস্করণ যা দ্রুততর এবং আরও কার্যকর। ART-এর মাধ্যমে Android অ্যাপ্লিকেশনগুলি দ্রুত রান করে এবং ব্যাটারির ব্যবহার কম হয়। DVM ছিল পুরনো ভার্চুয়াল মেশিন, তবে ART এর সাথে সেটি প্রতিস্থাপিত হয়েছে এবং আজকের Android ডিভাইসগুলোতে ART ব্যবহৃত হয়।
ART ব্যবহার করে, ডেভেলপাররা আরও ভালো পারফরম্যান্স, উন্নত ডিবাগিং টুল এবং ব্যাটারি সাশ্রয় করতে সক্ষম হয়, যা অ্যাপ্লিকেশন ডেভেলপমেন্ট এবং ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করে।
Android অ্যাপ্লিকেশনের মূল কাঠামো তৈরি করার জন্য চারটি প্রধান কম্পোনেন্ট ব্যবহার করা হয়। এগুলো হল Activity, Service, Content Provider, এবং Broadcast Receiver। প্রতিটি কম্পোনেন্টের নিজস্ব ভূমিকা রয়েছে এবং এগুলো একে অপরের সাথে সমন্বয় করে কাজ করে, যা একটি সম্পূর্ণ অ্যাপ্লিকেশন তৈরিতে সহায়তা করে। নিচে প্রতিটি কম্পোনেন্টের বিশদ আলোচনা করা হলো:
Android Application Components
১. Activity
Activity হল একটি Android অ্যাপ্লিকেশনের মূল UI কম্পোনেন্ট, যা ব্যবহারকারী ইন্টারফেস তৈরি করে এবং ব্যবহারকারীর সাথে ইন্টারঅ্যাকশন করতে দেয়। প্রতিটি Activity একটি উইন্ডো তৈরি করে, যেখানে UI উপাদান যেমন বোতাম, টেক্সটবক্স ইত্যাদি থাকে। একটি অ্যাপ্লিকেশনে একাধিক Activity থাকতে পারে।
বৈশিষ্ট্য:
- প্রতিটি Activity একটি স্ক্রিন বা UI উপস্থাপন করে।
- onCreate(), onStart(), onResume(), onPause(), onStop(), এবং onDestroy() মেথডের মাধ্যমে একটি Activity এর জীবনচক্র পরিচালিত হয়।
- Activity দুটি প্রকার হতে পারে:
- Main Activity: অ্যাপ্লিকেশন শুরু করার জন্য।
- Secondary Activity: অন্যান্য স্ক্রিন বা পেজ পরিচালনার জন্য।
উদাহরণ:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
ব্যবহার:
- অ্যাপ্লিকেশনের বিভিন্ন স্ক্রিনের জন্য।
- ইউজার ইন্টারফেস পরিচালনা করার জন্য।
২. Service
Service হল একটি Android কম্পোনেন্ট যা ব্যাকগ্রাউন্ডে দীর্ঘ সময় ধরে কাজ চালিয়ে যেতে পারে এবং এটি সরাসরি ব্যবহারকারীর সাথে ইন্টারঅ্যাকশন করে না। Service ব্যাকগ্রাউন্ড প্রসেসিংয়ের জন্য ব্যবহৃত হয়, যেমন নেটওয়ার্কে ডেটা ফেচ করা, ফাইল ডাউনলোড করা, মিউজিক প্লেয়িং ইত্যাদি।
বৈশিষ্ট্য:
- Service সরাসরি UI তে কাজ করে না, বরং ব্যাকগ্রাউন্ডে চালিত হয়।
- একটি Service শুরু করার পর সেটি অটোমেটিকভাবে বন্ধ হয় না, যতক্ষণ না আপনি ইচ্ছাকৃতভাবে সেটি বন্ধ করেন।
- Service দুই প্রকার:
- Started Service: যখন একটি কম্পোনেন্ট (যেমন Activity) সার্ভিস শুরু করে, সেটি ব্যাকগ্রাউন্ডে কাজ করে এবং শেষ হলে বন্ধ হয়।
- Bound Service: এটি একটি ক্লায়েন্টের সাথে সংযুক্ত থাকে এবং ক্লায়েন্ট অ্যাপ্লিকেশন কাজ শেষ করলে বন্ধ হয়।
উদাহরণ:
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Service logic goes here
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
ব্যবহার:
- ব্যাকগ্রাউন্ডে মিউজিক প্লে করা।
- ডেটা সিঙ্ক করা।
- ব্যাকগ্রাউন্ড টাস্ক প্রক্রিয়াকরণ।
৩. Content Provider
Content Provider Android এর একটি কম্পোনেন্ট যা অ্যাপ্লিকেশনগুলির মধ্যে ডেটা শেয়ার করতে ব্যবহৃত হয়। এটি SQL ডেটাবেস, ফাইল সিস্টেম, বা অন্য কোন ডেটা উৎস থেকে ডেটা অ্যাক্সেস করতে দেয়। Content Provider একটি ইউনিফাইড ইন্টারফেস প্রদান করে, যার মাধ্যমে অন্য অ্যাপ্লিকেশন বা কম্পোনেন্ট ডেটা রিড বা রাইট করতে পারে।
বৈশিষ্ট্য:
- এটি বিভিন্ন অ্যাপ্লিকেশনের মধ্যে ডেটা শেয়ার করার জন্য ব্যবহৃত হয়।
- Content Provider URIs এর মাধ্যমে ডেটা অ্যাক্সেস করে।
- SQLite, JSON, বা XML ফাইলের মাধ্যমে ডেটা সংরক্ষণ এবং শেয়ারিং সম্ভব।
- CRUD অপারেশন (Create, Read, Update, Delete) এর মাধ্যমে ডেটা ম্যানিপুলেশন করা যায়।
উদাহরণ:
public class MyContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
// Initialize the content provider
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// Provide data to the calling app
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// Insert new data
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// Delete data
return 0;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
// Update data
return 0;
}
}
ব্যবহার:
- ডেটাবেস অ্যাক্সেস এবং ম্যানেজমেন্ট।
- ফাইল সিস্টেম বা SQL ডেটাবেস থেকে ডেটা শেয়ার করা।
৪. Broadcast Receiver
Broadcast Receiver হল একটি কম্পোনেন্ট, যা Android সিস্টেম বা অন্য অ্যাপ্লিকেশন থেকে ব্রডকাস্ট করা মেসেজ (Broadcast) গ্রহণ করে এবং তা প্রক্রিয়া করে। Broadcast Receivers সাধারণত সিস্টেম ব্রডকাস্ট ইভেন্টগুলির জন্য ব্যবহৃত হয়, যেমন ব্যাটারি কমে যাওয়া, ইন্টারনেট কানেকশন চালু হওয়া ইত্যাদি।
বৈশিষ্ট্য:
- Broadcast Receiver সরাসরি UI নিয়ে কাজ করে না, তবে এটি ইভেন্ট অনুযায়ী UI এর অন্যান্য কম্পোনেন্টকে সক্রিয় করতে পারে।
- এটি সাধারণত ব্যাকগ্রাউন্ডে কাজ করে এবং সিস্টেম বা অ্যাপ্লিকেশন দ্বারা ব্রডকাস্ট হওয়া ইভেন্টের জন্য অপেক্ষা করে।
- onReceive() মেথডের মাধ্যমে ব্রডকাস্ট ইভেন্ট গ্রহণ করা হয়।
উদাহরণ:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Handle the received broadcast message
Toast.makeText(context, "Broadcast received!", Toast.LENGTH_SHORT).show();
}
}
ব্যবহার:
- ব্যাটারি লেভেল মনিটরিং।
- নেটওয়ার্ক পরিবর্তন পর্যবেক্ষণ।
- অন্যান্য সিস্টেম ইভেন্ট পরিচালনা করা।
উপসংহার:
Android অ্যাপ্লিকেশন কম্পোনেন্টগুলোর প্রত্যেকটির নিজস্ব গুরুত্বপূর্ণ ভূমিকা রয়েছে। Activity ব্যবহারকারীর সাথে ইন্টারফেস করে, Service ব্যাকগ্রাউন্ডে কাজ সম্পন্ন করে, Content Provider অ্যাপ্লিকেশনের মধ্যে ডেটা শেয়ার করতে দেয়, এবং Broadcast Receiver সিস্টেম ইভেন্টগুলো পরিচালনা করে। এই কম্পোনেন্টগুলো একত্রিত হয়ে একটি পূর্ণাঙ্গ Android অ্যাপ্লিকেশন গঠনে সহায়ক হয়।
Android অ্যাপ্লিকেশন লাইফসাইকেল হল এমন একটি প্রক্রিয়া যেখানে একটি অ্যাপ্লিকেশন তৈরি হওয়া থেকে শুরু করে তা ধ্বংস হওয়া পর্যন্ত বিভিন্ন পর্যায়ে যায়। Android এর প্রতিটি অ্যাপ্লিকেশন এক বা একাধিক Activity নিয়ে গঠিত, যা ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করে। প্রতিটি Activity-এর নিজস্ব একটি লাইফসাইকেল থাকে, যা Activity Lifecycle মেথডের মাধ্যমে পরিচালিত হয়।
Activity Lifecycle ম্যানেজ করার জন্য Android বিভিন্ন callback methods প্রদান করে, যা Activity-এর জীবনচক্রের বিভিন্ন পর্যায়ে ট্রিগার হয়।
Android Application Lifecycle
নিচে Android অ্যাপ্লিকেশনের লাইফসাইকেলের প্রতিটি পর্যায় বিস্তারিতভাবে আলোচনা করা হলো।
১. onCreate()
- onCreate() মেথডটি Activity-এর প্রথম কলব্যাক মেথড এবং যখনই Activity প্রথমবার তৈরি হয় তখন এটি কল করা হয়।
- এটি Activity-এর জন্য প্রয়োজনীয় ইনিশিয়াল সেটআপ যেমন UI লোড করা, ডেটা ইনিশিয়ালাইজ করা, এবং অন্যান্য প্রাথমিক কাজগুলো সম্পন্ন করে।
উদাহরণ:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize UI components or variables here
}
২. onStart()
- onStart() মেথডটি onCreate() এর পরে কল করা হয় এবং এটি Activity কে দৃশ্যমান করে।
- Activity এখন UI নিয়ে কাজ শুরু করে, কিন্তু এটি এখনও ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করার জন্য প্রস্তুত নয়।
উদাহরণ:
@Override
protected void onStart() {
super.onStart();
// Activity is now visible to the user
}
৩. onResume()
- onResume() মেথডটি তখন কল করা হয় যখন Activity সম্পূর্ণভাবে দৃশ্যমান হয় এবং এটি এখন ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করার জন্য প্রস্তুত।
- Activity এখন সক্রিয় (foreground) এবং ব্যবহারকারী এটির সাথে ইন্টারঅ্যাক্ট করতে পারে।
উদাহরণ:
@Override
protected void onResume() {
super.onResume();
// Activity is now in the foreground and interacting with the user
}
৪. onPause()
- onPause() মেথডটি তখন কল করা হয় যখন Activity এর সাথে ইন্টারঅ্যাকশন বন্ধ হয়ে যায় কিন্তু Activity এখনও দৃশ্যমান থাকে। উদাহরণস্বরূপ, আপনি যদি অন্য কোনো Activity বা অ্যাপ্লিকেশন চালান, তখন onPause() মেথড চালু হয়।
- Activity এর গুরুত্বপূর্ণ ডেটা সংরক্ষণ করার জন্য এটি ব্যবহার করা হয়, যেমন ব্যবহারকারীর ইনপুট সংরক্ষণ করা।
উদাহরণ:
@Override
protected void onPause() {
super.onPause();
// Activity is partially visible but not interacting with the user
}
৫. onStop()
- onStop() মেথডটি তখন কল করা হয় যখন Activity সম্পূর্ণরূপে দৃশ্যমান নয় এবং এটি ব্যাকগ্রাউন্ডে চলে যায়। উদাহরণস্বরূপ, আপনি যদি অন্য কোনো Activity পুরো স্ক্রিনে চালু করেন।
- এই পর্যায়ে Activity ব্যাকগ্রাউন্ডে চলে যায় এবং এটি আর ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করে না।
উদাহরণ:
@Override
protected void onStop() {
super.onStop();
// Activity is now completely hidden
}
৬. onRestart()
- onRestart() মেথডটি তখন কল করা হয় যখন onStop() মেথডের পরে Activity পুনরায় চালু হয়। এটি মূলত onStart() এর আগে কল করা হয়।
- যখন Activity ব্যাকগ্রাউন্ড থেকে পুনরায় শুরু হয় তখন এটি ব্যবহার করা হয়।
উদাহরণ:
@Override
protected void onRestart() {
super.onRestart();
// Activity is restarting from stopped state
}
৭. onDestroy()
- onDestroy() মেথডটি Activity সম্পূর্ণরূপে ধ্বংস হওয়ার আগে কল করা হয়। এটি Activity-কে মেমোরি থেকে সরিয়ে ফেলার আগে শেষবারের মতো সম্পাদিত হয়।
- এই পর্যায়ে Activity এর সমস্ত রিসোর্স ক্লিনআপ করা হয়।
উদাহরণ:
@Override
protected void onDestroy() {
super.onDestroy();
// Cleanup resources and final actions before destroying the activity
}
Android Activity Lifecycle Flow

৮. Activity Lifecycle এর চক্র
Android Activity এর জীবনচক্রের প্রতিটি স্টেজ একটি পূর্ণাঙ্গ চক্র তৈরি করে, যেখানে প্রতিটি স্টেজ একটি নির্দিষ্ট কাজের জন্য দায়ী। Activity lifecycle এর প্রধান পর্যায়গুলো:
- onCreate() → Activity তৈরি হয়।
- onStart() → Activity দৃশ্যমান হয়।
- onResume() → Activity সক্রিয় এবং ইন্টারঅ্যাক্টেবল হয়।
- onPause() → Activity ব্যাকগ্রাউন্ডে চলে যায়, কিন্তু আংশিকভাবে দৃশ্যমান থাকে।
- onStop() → Activity সম্পূর্ণরূপে ব্যাকগ্রাউন্ডে চলে যায় এবং দৃশ্যমান নয়।
- onDestroy() → Activity সম্পূর্ণরূপে ধ্বংস হয়ে যায়।
উপসংহার
Android এর Activity Lifecycle একটি গুরুত্বপূর্ণ অংশ যা অ্যাপ্লিকেশনের পারফরম্যান্স এবং ব্যবহারকারীর অভিজ্ঞতার উপর প্রভাব ফেলে। সঠিকভাবে এই লাইফসাইকেল পরিচালনা করে অ্যাপ্লিকেশনটি ব্যাটারি, মেমোরি এবং অন্যান্য সিস্টেম রিসোর্স সঠিকভাবে ব্যবহার করতে পারে। প্রতিটি কলব্যাক মেথডকে সঠিকভাবে হ্যান্ডেল করে একটি সুষ্ঠু এবং কার্যকরী Android অ্যাপ্লিকেশন তৈরি করা যায়।
AndroidManifest.xml ফাইলটি প্রতিটি Android অ্যাপ্লিকেশনের একটি অত্যন্ত গুরুত্বপূর্ণ অংশ। এটি মূলত একটি কনফিগারেশন ফাইল, যেখানে অ্যাপ্লিকেশনের গুরুত্বপূর্ণ তথ্য এবং সেটিংস সংরক্ষিত থাকে। AndroidManifest.xml ফাইলটি অ্যাপ্লিকেশনকে সিস্টেমের কাছে কীভাবে উপস্থাপন করতে হবে, অ্যাপ্লিকেশন কী কী পারমিশন ব্যবহার করবে, অ্যাপের কম্পোনেন্টগুলি কী কী হবে এবং অ্যাপ্লিকেশনটি কীভাবে ব্যবহারকারীর সাথে ইন্টারঅ্যাক্ট করবে, সেসব বিষয় সংজ্ঞায়িত করে।
AndroidManifest.xml এর ভূমিকা এবং কাজগুলো:
১. অ্যাপ্লিকেশনের প্যাকেজের সংজ্ঞা
AndroidManifest.xml ফাইলের প্রথম কাজ হল অ্যাপ্লিকেশনের প্যাকেজের নাম সংজ্ঞায়িত করা। এই প্যাকেজ নামটি অ্যাপ্লিকেশনটির ইউনিক আইডেন্টিফায়ার হিসেবে কাজ করে এবং Google Play Store বা অন্য কোথাও এই নামের মাধ্যমে অ্যাপকে আলাদা করে চিহ্নিত করা হয়।
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- Other elements go here -->
</manifest>
২. অ্যাপ্লিকেশন কম্পোনেন্টগুলোর ঘোষণা
AndroidManifest.xml এ অ্যাপ্লিকেশনের সব কম্পোনেন্ট ঘোষণা করতে হয়, যেমন Activities, Services, Broadcast Receivers, এবং Content Providers। প্রতিটি কম্পোনেন্টকে আলাদাভাবে <activity>, <service>, <receiver>, বা <provider> ট্যাগের মাধ্যমে ঘোষণা করা হয়।
উদাহরণ:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<!-- Main Activity Declaration -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
উপরের উদাহরণে, MainActivity অ্যাপের প্রাথমিক স্ক্রিন হিসেবে ঘোষণা করা হয়েছে, যা অ্যাপটি চালু হলে প্রথম প্রদর্শিত হবে।
৩. Permissions (পারমিশন)
যদি কোনো অ্যাপ্লিকেশন ব্যবহারকারীর ডিভাইসের সংবেদনশীল ফিচার যেমন ইন্টারনেট, ক্যামেরা, লোকেশন, বা ফোন স্টোরেজে অ্যাক্সেস করতে চায়, তবে এই পারমিশনগুলোকে AndroidManifest.xml এ ঘোষণা করতে হবে। Android অ্যাপ্লিকেশনগুলি অনুমতির ভিত্তিতে কাজ করে, তাই ব্যবহারকারীকে জানাতে এবং সিস্টেম থেকে অনুমোদন পেতে এই পারমিশনগুলো প্রয়োজন।
উদাহরণ:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
এখানে, অ্যাপ্লিকেশনটি ইন্টারনেট এবং ডিভাইসের নির্দিষ্ট লোকেশনে অ্যাক্সেস করার পারমিশন চাচ্ছে।
৪. অ্যাপ্লিকেশনের মেটাডেটা
AndroidManifest.xml ফাইলটি অ্যাপ্লিকেশনের অতিরিক্ত মেটাডেটা সংরক্ষণ করতে পারে। এটি প্রায়শই তৃতীয় পক্ষের লাইব্রেরি এবং API এর জন্য কনফিগারেশন ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।
উদাহরণ:
<application>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="your_google_maps_api_key"/>
</application>
উপরের উদাহরণে, Google Maps API এর জন্য একটি API key ঘোষণা করা হয়েছে।
৫. অ্যাপ্লিকেশন থিম এবং আইকন সেটিংস
AndroidManifest.xml ফাইলে অ্যাপের জন্য থিম, অ্যাপের আইকন এবং অ্যাপের নাম সংজ্ঞায়িত করা হয়। থিমটি নির্ধারণ করে যে অ্যাপ্লিকেশনের জন্য কোন ভিজ্যুয়াল স্টাইল ব্যবহার করা হবে এবং আইকন সেট করে অ্যাপের আইকন।
উদাহরণ:
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
</application>
৬. Intent Filters (ইনটেন্ট ফিল্টার)
Intent Filter ব্যবহার করে আপনি নির্ধারণ করতে পারেন যে কোনো অ্যাপ্লিকেশন কীভাবে এবং কোন পরিস্থিতিতে চালু হবে। উদাহরণস্বরূপ, আপনি একটি অ্যাপের নির্দিষ্ট Activity কে "Launcher Activity" হিসেবে ঘোষণা করতে পারেন, যা অ্যাপটি চালু করলে প্রথমে প্রদর্শিত হবে।
উদাহরণ:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
উপরের উদাহরণে, MainActivity কে "Launcher Activity" হিসেবে ঘোষণা করা হয়েছে।
৭. ডিভাইস কম্প্যাটিবিলিটি এবং ফিচার ব্যবহার
AndroidManifest.xml ফাইলে আপনি অ্যাপ্লিকেশন কোন ডিভাইস ফিচারগুলো ব্যবহার করবে তা ঘোষণা করতে পারেন, যেমন ক্যামেরা, Bluetooth, NFC ইত্যাদি। এছাড়াও, কোন ডিভাইসে অ্যাপটি চলবে (যেমন মোবাইল, ট্যাবলেট) তাও নির্ধারণ করা যায়।
উদাহরণ:
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-feature android:name="android.hardware.bluetooth" android:required="false"/>
৮. App Versioning (অ্যাপ ভার্সনিং)
AndroidManifest.xml এ অ্যাপ্লিকেশনের সংস্করণ এবং versionCode ও versionName ঘোষণা করা হয়, যা অ্যাপ্লিকেশনটির আপডেট এবং ব্যবহারের জন্য প্রয়োজনীয়।
উদাহরণ:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp"
android:versionCode="1"
android:versionName="1.0">
</manifest>
এখানে, versionCode হল একটি সংখ্যা যা সিস্টেম আপডেট ট্র্যাক করার জন্য ব্যবহৃত হয়, এবং versionName ব্যবহারকারীর জন্য প্রদর্শিত সংস্করণ নম্বর।
উপসংহার:
AndroidManifest.xml ফাইলটি Android অ্যাপ্লিকেশনের একটি অপরিহার্য অংশ, যা অ্যাপ্লিকেশনের গুরুত্বপূর্ণ তথ্য এবং সেটিংস সংরক্ষণ করে। এটি অ্যাপের কম্পোনেন্টগুলোকে সিস্টেমের সাথে সংযুক্ত করে, পারমিশন চাওয়া, ইনটেন্ট ফিল্টার সেট করা, এবং অন্যান্য কনফিগারেশন পরিচালনা করার জন্য দায়ী। এই ফাইলটি ছাড়া Android অ্যাপ্লিকেশন সঠিকভাবে কাজ করতে পারে না, কারণ এটি সিস্টেমকে অ্যাপের ফাংশন এবং প্রয়োজনীয়তাগুলি জানায়।
Read more